// pages/tasks/tasks.js
const { apiService } = require('../../utils/api')
const { showSuccess, showError, showLoading, hideLoading } = require('../../utils/util')

Page({

  /**
   * 页面的初始数据
   */
  data: {
    tasks: [],
    loading: false,
    hasMore: true,
    pageNum: 1,
    pageSize: 10,
    currentTab: 'available', // available, claimed, completed
    statusOptions: [
      { key: 'available', label: '可领取' },
      { key: 'claimed', label: '进行中' },
      { key: 'completed', label: '已完成' }
    ]
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.loadTasks()
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 页面显示时刷新数据
    this.refreshTasks()
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.refreshTasks()
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    this.loadMoreTasks()
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    return {
      title: '手工任务',
      path: '/pages/tasks/tasks'
    }
  },

  /**
   * 加载任务列表
   */
  async loadTasks() {
    if (this.data.loading) return

    this.setData({ loading: true })

    try {
      let result
      const params = {
        pageNum: this.data.pageNum,
        pageSize: this.data.pageSize
      }

      if (this.data.currentTab === 'available') {
        // 可领取的任务 - 从产品列表中获取上架的商品
        result = await apiService.getProductsList({
          ...params,
          status: 1 // 只显示上架商品
        })
        // 转换为任务显示格式
        result = {
          list: result.list || [],
          total: result.total || 0
        }
      } else {
        // 我的任务
        result = await apiService.getMyTasks({
          ...params,
          status: this.getStatusByTab(this.data.currentTab)
        })
      }

      const newTasks = result.list || []
      const tasks = this.data.pageNum === 1 ? newTasks : [...this.data.tasks, ...newTasks]

      this.setData({
        tasks: tasks,
        hasMore: newTasks.length === this.data.pageSize,
        loading: false
      })

      wx.stopPullDownRefresh()
    } catch (error) {
      this.setData({ loading: false })
      wx.stopPullDownRefresh()
      showError(error.message || '加载任务列表失败')
    }
  },

  /**
   * 根据标签页获取状态
   */
  getStatusByTab(tab) {
    const statusMap = {
      'claimed': [1, 2], // 已领取、待审核
      'completed': [3, 4] // 已完成、已驳回
    }
    return statusMap[tab] || []
  },

  /**
   * 刷新任务列表
   */
  refreshTasks() {
    this.setData({
      tasks: [],
      pageNum: 1,
      hasMore: true
    })
    this.loadTasks()
  },

  /**
   * 加载更多任务
   */
  loadMoreTasks() {
    if (!this.data.hasMore || this.data.loading) return

    this.setData({
      pageNum: this.data.pageNum + 1
    })
    this.loadTasks()
  },

  /**
   * 切换标签页
   */
  onTabChange(e) {
    const tab = e.currentTarget.dataset.tab
    this.setData({
      currentTab: tab
    })
    this.refreshTasks()
  },

  /**
   * 领取任务
   */
  async onClaimTask(e) {
    const productId = e.currentTarget.dataset.id

    try {
      await showLoading('领取中...')

      const claimData = {
        productId: productId
      }

      await apiService.claimTask(claimData)

      hideLoading()
      showSuccess('任务领取成功')

      // 刷新任务列表
      this.refreshTasks()
    } catch (error) {
      hideLoading()
      showError(error.message || '领取任务失败')
    }
  },

  /**
   * 查看任务详情
   */
  onTaskTap(e) {
    const id = e.currentTarget.dataset.id
    wx.navigateTo({
      url: `/pages/task-detail/task-detail?id=${id}`
    })
  },

  /**
   * 提交任务
   */
  onSubmitTask(e) {
    const id = e.currentTarget.dataset.id
    wx.navigateTo({
      url: `/pages/submit-task/submit-task?taskId=${id}`
    })
  }
})